// pages/cart/index.js
// import {getSetting,chooseAddress,openSetting} from "../../utils/asynWx.js"
Page({
  /**
   * 页面的初始数据
   */
  data: {
    Address:{},
    cart:[],
    allChecked:false,
    totalPrice:0,
    totalNum:0
  },
  // 点击收货地址
  GetAddress(){
    // 1.获取收货地址  api wx.chooseAddress
    // 获取用户对小程序所授予收货地址的权限状态scope
    // 1.假设用户点击获取收货地址的提示框确定  scope值为true 直接调用 获取收货地址
    // 2.假如用户从来没有调用过 收货地址的api scope值为undefined 直接调用 获取收货地址
    // 3.假设用户点击获取收货地址的提示框取消 scope值为false
          // 1.诱导用户自己打开授权设置页面 当用户重新给与 获取地址权限的时候
          // 2.获取收货地址
    // 获取的收货地址存到本地数据
    // 1.获取权限状态
    wx.getSetting({
      success: (result)=>{
        //2. 获取权限状态 主要发现一些 属性名很怪异的时候 都要使用[] 形式来获取属性值
        const scopeAddress = result.authSetting["scope.address"]
        console.log(result.authSetting["scope.address"])
          if(scopeAddress===true||scopeAddress===undefined){
            // 调用获取收货地址
            wx.chooseAddress({
              success: (result1)=>{
                const address = result1
                  console.log(address)
                // 存到本地上
                wx.setStorageSync("address", address)
              },
            });
        }else{
          // 3.用户以前拒绝过授权 先诱导用户打开授权页面
          wx.openSetting({
            success: (result2)=>{
              console.log(result2)
              // 4.获取收货地址代码 
              wx.chooseAddress({
                success: (result1)=>{
                  console.log(result1)
                  const address = result1
                  console.log(address)
                  // 存到本地上
                  wx.setStorageSync("address", address)
                },
              }); 
            },
          });
        }
      },
    });
  },
  // 商品的选中
  handCheckChange(e){
    // 1.获取被修改的商品的ID
    const goods_id =e.currentTarget.dataset.id;
    // 2.获取购物车数组
    let {cart} = this.data;
    // 3.找到被修改的商品队形
    let index =cart.findIndex(v=>v.goods_id === goods_id);
    // 4.选中状态取反
    cart[index].checked=!cart[index].checked
    //5.把购物车数据重新设置回data中和缓存中  方法调用
    this.setCart(cart)
  },
  // 商品全选和反选
  handAllChecked(){
    // 获取data中的数据
    let {cart,allChecked} =this.data
    // 给全选属性取反
    allChecked = !allChecked
    // 循环遍历cart商品数组中每一项
    cart.forEach(v=>v.checked=allChecked);
    // 把修改后的cart 设置到data和缓存中 方法调用
    this.setCart(cart)
  },
  // 商品数量的编辑
  handleItemNumEdit(e){
    // return
    // 1.先获取传递过来的参数
    const {operation,id} = e.currentTarget.dataset;
    // 2.获取购物车数组
    let {cart} = this.data;
    // 3.找到需要修改的商品的索引
    const index = cart.findIndex(v=>v.goods_id===id)
    // 判断是否要执行删除 // 购物车数量为1 点击- 弹窗提示 询问用户 是否删除商品 确定就删除 取消什么也不干 
    if(cart[index].num===1&&operation===-1){
      wx.showModal({
        title: '提示',
        content: '您是否要删除？',
        success: (res) => {
          if (res.confirm) {
            console.log('用户点击确定')
            cart.splice(index,1) //删除一个元素
            this.setCart(cart)
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    }else{
      // 4.进行修改数量
      cart[index].num+=operation
      // 5.设置回缓存和data中 
      this.setCart(cart)
    }
  },
  // 点击结算
  handlePay(){
    // 拿地址
    const {Address,totalNum} = this.data
    console.log(Address.userName)
    // 判断收获地址
    if(Address.userName == undefined){
      wx.showToast({
        title: '请添加收货地址',
        icon: 'success',
      }) 
      return;  
    }
    // 判断有没有选购商品
    if(totalNum===0){
      wx.showToast({
        title:'请选购商品',
        icon: 'success',
        duration: 2000
      }) 
      return;
    }
     // 跳转 支付页面
     wx.navigateTo({
       url: '/pages/pay/index',
     });

  },

  /**
   * 生命周期函数--监听页面显示
   */ 
  onShow: function () {
    // 获取本地Address地址
    const Address = wx.getStorageSync("address");
    // ------------------------
    // 获取到本地存储中的商品t数组
    // 回到商品首页详情页面 第一次添加商品的时候 手动添加了属性// num=1  checked=true
    const cart = wx.getStorageSync("cart")||[]; 
    this.setData({
      Address
    })
    // 方法调用
    this.setCart(cart)
  },

  // 设置购物车状态同时重新计算底部工具栏的数据 全选 总数量 总价格
  setCart(cart){
    // 重新计算全选 总价格 总数量
    // 全选的实现数据的展示
        //  1.获取缓存中的购物车数组 allChecked
        //  2.根据购物车中的商品数据 所有的商品都被选中 checked-true 全选就被选中
      // 1.计算全选 
      // every数组方法会遍历会接受一个回调函数那么每一个回调函数都会返回true 那么every方法的返回值
      // 只要有一个回调函数返回的值是false 那么就不在循环执行，直接返回false
      // 空数组 调用every 返回值就是true
    // const allChecked=cart.length?cart.every(v=>v.  checked):false
    // --------------------------
      //总价格 总数量
      // 1.都需要商品被选中 我们才能计算
      // 2.获取购物车的数组
      // 3.遍历
      // 4.判断商品是不是被选中
      // 5.总价格 += 商品的单价 * 商品的数量
      // 6.总数量 += 商品的数量
      // 7.把计算后的价格和数量 设置回data中即可
      let allChecked =true
      let totalPrice = 0
      let totalNum = 0
      cart.forEach(v =>{
        if(v.checked){
          totalPrice +=v.num * v.goods_price;
          totalNum += v.num
        }else{
          allChecked=false
        }
      })
      allChecked = cart.length!=0?allChecked:false
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked
    })
    wx.setStorageSync("cart",cart)
  },
})